#pragma once

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>

#include "..\common\headers\ICamera.h"
#include "..\Demo\IAnimatable.h"
#include "CameraTarget.h"

class Camera : public ICamera, public IAnimatable
{
protected:
	Vec3 position;
	CameraTarget *target;
	float roll;

	int id;

public:
	Camera(int id, int targetId);
	~Camera();

	void Process(float ms);
	void SetViewMatrix();
	void SetInverseViewMatrix();

	Vec3 GetPosition();
	Vec3 GetTargetPosition();
	float GetRoll();

	virtual float GetTargetDistance();
	CameraTarget * GetTarget();

	void SetRotation(float angle, sm::Vec3 axis);
	void SetScale(sm::Vec3 scale);

	virtual void SetPosition(Vec3 position);
	virtual void SetLookTarget(Vec3 lookTarget);
	virtual void SetRoll(float roll);

	int GetId();
};
